package com.wutu.nbyjk8.utils;

import org.apache.poi.poifs.filesystem.FileMagic;
import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.util.Arrays;

/**
 * @Author : Liuts
 * @Desc : 文件上传校验
 * @create 2023/12/28 9:32
 */
public class FileUploadUtils {

    public final static String SUCCSEE = "success";

    /**
     * @param file 文件
     * @param size 文件大小限制
     * @param type 文件类型限制
     * @Desc: 校验文件
     * @return: java.lang.String
     * @Author: lts
     * @Date: 2023/12/28 10:13
     */
    public static String check(MultipartFile file, int size, FileMagic... type) throws IOException {
        if (file == null || file.isEmpty()) {
            return "上传文件不允许为空";
        }

        if (file.getSize() > 1024 * 1024 * size) {
            return "上传文件大小不允许超过" + size + "M";
        }

        //bug: 直接使用inputStream传入FileMagic.valueOf(file.getInputStream();) 可能会获取报错
        //      error getFileMagic() only operates on streams which support mark(int)
        //原因: BufferedInputStream中markSupported方法返回值为false造成的InputStream中返回值是true
        //优化：InputStream is = new BufferedInputStream(file.getInputStream();)
        BufferedInputStream in = new BufferedInputStream(file.getInputStream());
        FileMagic fileMagic = FileMagic.valueOf(in);
        if (!Arrays.asList(type).contains(fileMagic)) {
            return "不支持的文件类型";
        }

        return SUCCSEE;
    }
}
